Computer programs are generally built using control flow mechanisms and data structures. Control flow mechanisms direct a computing system's processor(s), not only to control which instructions are executed, but also to control the sequences in which those instructions and instruction blocks are executed. Data structures organize values which are generated or manipulated by the execution of instructions, including input values, intermediate computation values, output values, values which are referenced and/or modified by the control flow mechanisms, and other data.
Because of the demands placed on them in software, data structures are often tailored to particular kinds of data, particular performance goals, and even particular programming preferences. They are sometimes categorized, e.g., as linked lists, tables, arrays, trees, or any of several other categories, but even within a category, much variation occurs, e.g., lists may be singly or doubly linked and list node content varies widely. Moreover, categories can be combined in many ways, e.g., a given data structure might be an array of linked lists, or a tree of tables, or a list of pointers to arrays whose elements include records containing strings, bitflags and callback procedure addresses, and so on.